package com.carrental.search.client;

import com.carrental.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * 车辆服务Feign客户端
 * 用于与车辆微服务通信
 */
@FeignClient(name = "car-vehicle", path = "/vehicles")
public interface VehicleClient {

    /**
     * 获取车辆详情
     *
     * @param id 车辆ID
     * @return 车辆详情
     */
    @GetMapping("/{id}")
    Result<Map<String, Object>> getVehicleDetail(@PathVariable("id") Long id);

    /**
     * 获取所有车辆列表
     *
     * @return 车辆分页数据
     */
    @GetMapping("/page")
    Result<Map<String, Object>> getAllVehicles();

    /**
     * 获取推荐车辆列表
     *
     * @return 推荐车辆列表
     */
    @GetMapping("/recommend")
    Result<List<Map<String, Object>>> getRecommendedVehicles();

    /**
     * 根据品牌获取车辆列表
     *
     * @param brandId 品牌ID
     * @return 车辆列表
     */
    @GetMapping("/list/brand/{brandId}")
    Result<Map<String, Object>> getVehiclesByBrand(@PathVariable("brandId") Long brandId);

    /**
     * 根据类型获取车辆列表
     *
     * @param type 类型
     * @return 车辆列表
     */
    @GetMapping("/list/type/{type}")
    Result<Map<String, Object>> getVehiclesByType(@PathVariable("type") Integer type);

    /**
     * 根据门店ID获取车辆列表
     *
     * @param storeId 门店ID
     * @return 车辆列表
     */
    @GetMapping("/list/store/{storeId}")
    Result<Map<String, Object>> getVehiclesByStore(@PathVariable("storeId") Long storeId);

    /**
     * 获取热门车辆列表
     *
     * @param limit 限制数量
     * @return 热门车辆列表
     */
    @GetMapping("/hot")
    Result<List<Map<String, Object>>> getHotVehicles(@RequestParam(value = "limit", defaultValue = "10") Integer limit);

    /**
     * 获取最新上架车辆列表
     *
     * @param limit 限制数量
     * @return 最新上架车辆列表
     */
    @GetMapping("/newest")
    Result<List<Map<String, Object>>> getNewestVehicles(@RequestParam(value = "limit", defaultValue = "10") Integer limit);

    /**
     * 获取所有车辆品牌列表
     *
     * @return 品牌列表
     */
    @GetMapping("/brands")
    Result<List<String>> getAllBrands();

    /**
     * 获取所有车辆类型列表
     *
     * @return 类型列表
     */
    @GetMapping("/types")
    Result<List<String>> getAllTypes();
} 